﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using pwblog.Entities;
using pwblog.DataAccess;

namespace pwblog.BusinessObject
{
    public class ArticleXmlBo
    {
        ArticleXmlDao articleXmlDao;

        public ArticleXmlBo()
        {
            articleXmlDao = new ArticleXmlDao();
        }

        /// <summary>
        /// lấy tất cả thông tin bài viết từ file xml
        /// </summary>
        /// <returns>các đối tượng ArticleXml</returns>
        public ArticleXml[] GetArticlesFromXml()
        {
             return articleXmlDao.GetArticlesFromXml().ToArray().Reverse().ToArray();
        }

        /// <summary>
        /// thêm một thông tin bài viết mới vào file xml
        /// </summary>
        /// <param name="id">id bài viết tương ứng trong csdl</param>
        /// <param name="title">tên bài viết</param>
        /// <param name="pubDate">ngày đăng bài</param>
        /// <param name="creator">người tạo bài viết</param>
        /// <param name="description">mô tả bài viết</param>
        /// <param name="link">link bài viết</param>
        internal void InsertArticleXml(int id, string title, string pubDate, string creator, string description, string link)
        {
            ArticleXml articleXml = new ArticleXml()
            {
                Id = id.ToString(),
                Title = title,
                PubDate = pubDate,
                Creator = creator,
                Description = description,
                Link = link
            };

            articleXmlDao.InsertArticleXml(articleXml);
        }

        /// <summary>
        /// Cập nhật bài viết trong file xml
        /// </summary>
        /// <param name="id">id bài viết</param>
        /// <param name="title">tựa bài viết</param>
        /// <param name="pubDate">ngày post bài</param>
        /// <param name="creator">người tạo</param>
        /// <returns></returns>
        public bool UpdateArticleXml(int id, string title, string pubDate, string creator)
        {
            try
            {
                ArticleXml articleXml = articleXmlDao.GetArticleXmlById(id.ToString());
                articleXml.Title = title;
                articleXml.PubDate = pubDate;
                articleXml.Creator = creator;
                articleXmlDao.UpdateArticleXml(articleXml);
                return true;
            }
            catch(Exception ex)
            {
                return false;
            }
            
        }

        /// <summary>
        /// xóa thông tin bài viết trong file xml
        /// </summary>
        /// <param name="idArticle">id của bài viết</param>
        /// <returns></returns>
        public bool DeleteArticleXml(int idArticle)
        {
            try
            {
                articleXmlDao.DeleteArticleXml(idArticle.ToString());
                return true;
            }
            catch
            {
                return false;
            }
        }


        /// <summary>
        /// Lấy thông tin bài viết theo id trong file xml
        /// </summary>
        /// <param name="id">id của bài viết</param>
        /// <returns></returns>
        internal ArticleXml GetArticleXmlById(string id)
        {
            try
            {
                return articleXmlDao.GetArticleXmlById(id);
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// Cập nhật thông tin của bài viết trong file xml
        /// </summary>
        /// <param name="id">id của bài viết</param>
        /// <param name="title">tựa đề bài viết</param>
        /// <param name="description">mô tả bài viết</param>
        /// <returns></returns>
        internal bool UpdateArticleXml(string id, string title, string description)
        {
            try
            {
                ArticleXml articleXml = articleXmlDao.GetArticleXmlById(id);
                articleXml.Title = title;
                articleXml.Description = description;
                articleXmlDao.UpdateArticleXml(articleXml);
                return true;
            }
            catch
            {
                return false;
            }
        }

        internal ArticleXml[] SearchArticleXml(string key)
        {
            try
            {
                ArticleXml[] articleXml = articleXmlDao.GetArticlesByKey(key);
                return articleXml;
            }
            catch(Exception ex)
            {
                return null;
            }
        }
    }
}